<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
</head>
<body>
  <script>
    /* 
      我们可以在异步处理的函数中返回一个promise对象

      Promise的三种状态
        pending(进行中) fulfilled(成功) rejected(失败)
      function 异步函数 () {
        return Promise (function (resolve, reject) {
          // 异步操作，得到结果
          if (成功) {
            resolve(异步请求数据)
          } else {
            // 失败
            reject(错误信息)
          }

        }) 
      }
      
      resolve和reject实际上就是
      异步函数().then(resolve函数).catch(reject函数)

      异步函数().then(function () {
        // 这就是reslove函数
      }).catch(function () {
        // 这是reject函数
      })
      
      promise将回调函数的嵌套变成链式调用，方便我们进行代码的维护

    */

    /* function request (person, success, error) {
      console.log('向' + person + '发起请求')
      if (Math.random() > 0.5) {
        success()
      }else {
        error()
      }
    } */
    
// 
//     function request (person) {
//       // 请求函数如果想要使用promise的话，需要返回一个promise对象
//       console.log('向' + person + '发起请求')

//       return new Promise(function (resolve, reject) {
//         // resolve和reject是两个函数，如果成功执行resolve如果失败执行reject函数
//         if (Math.random() > 0.5) {
//           // console.log('函数中:成功')
//           resolve()
//         } else {
//           // console.log('函数中:失败')
//           reject()
//         }
//       })
//     }

//     request('父亲').then(function () {
//       console.log('成功')
//       return request('姑姑')
//     }).then(function () {
//       console.log('成功')
//       return request('叔叔')
//     }).then(function () {
//       console.log('成功')
//     }).catch(function () {
//       console.log('失败')
//     }) 
  
   /*    function request (person){
        console.log('向'+person+'请求成功')
        return new Promise(function(resolve,reject){
          if(Math.random()>0.5){
          resolve()
        } else{
          reject()
        }
        })   
      }

      request('父亲').then(function(){
        console.log('成功')
        return request('姑姑')
      }).then(function(){
        console.log("成功")
        return request('叔叔')
      }).then(function(){
        console.log('成功')
      }).catch(function(){
        console.log('失败')
      }) */

      function request(Person){
        console.log('向'+Person+'发起请求')
          return new  Promise(function(resolve,reject){
            if(Math.random() > 0.5){
              resolve()
            }else{
              reject()
            }
          })
      }
      request('父亲').then(function(){
        console.log('成功')
        return request('母亲')
      }).then(function(){
        console.log('成功')
        return request('女朋友')
      }).then(function(){
        console.log('成功')
      }).catch(function(){
        console.log('失败')
      })
</script>
</body>
</html>